package com.yc.thread.conpro;

import lombok.Data;

/**
 * 具体的物品类
 */
@Data
public class Info {
    // 产品名称
    private String productName;
    // 产品描述
//    private String productDesc;
    // 产品状态
    private String productStatus;

    private boolean flag = true; // true 表示只能生产

    /*
     * flag=true  表示此时可以生产，但不能消费
     * flag=false 表示此时可以消费，但不能生产
     */
    public synchronized void set(String name,String productStatus) {
        //同步方法，可以保证同一时刻只有一个线程在执行此方法

        if (!flag) {  //表示此时可以消费，但不能生产
            try {
                super.wait();  //生产者等待
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        this.setProductName(name);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.setProductStatus(productStatus);
        System.out.println(this.productName+this.productStatus);
        this.flag = false; //生产完成后，将标志位改变，以便消费者来判断是否可以消费了
        super.notify();  //唤醒消费者进程
    }

    // 消费者需要调用
    public synchronized void get() {
        if (flag) {  //表示此时可以生产，但不能消费
            try {
                super.wait();  //消费者等待
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(this.productName+this.productStatus);

        this.flag = true;  //消费完成后，将标志位改变，以便生产者来判断是否可以生产了
        super.notify();  //唤醒生产者进程
    }


}
